package com.lms.map;

import java.util.*;

/**
 * @Author: 李孟帅
 * @CreateTime: 2020-06-03 07:09
 * @Description:
 */
public class TreeMapDemo {
    public static void main(String[] args) {
        //使用其键的自然排序构造一个新的空树状图。
        TreeMap<Object, Object> treeMap1 = new TreeMap<>();
        //构造一个新的，空的树图，按照给定的比较器排序。
        TreeMap<Integer, String> treeMap = new TreeMap<>(Comparator.comparingInt(a -> -a));

        treeMap.put(4,"d");
        treeMap.put(1,"a");
        treeMap.put(2,"b");
        treeMap.put(3,"c");
        treeMap.put(5,"e");
        treeMap.put(10,"f");
        treeMap.put(15,"g");
        System.out.println(treeMap);
        //返回与大于或等于给定键的最小键相关联的键值映射，如果没有此键，则 null 。 注意，根据比较器来判断大小
        Map.Entry<Integer, String> integerStringEntry = treeMap.ceilingEntry(6);  //5=e
        //返回大于或等于给定键的 null键，如果没有此键，则返回 null 。
        Integer integer = treeMap.ceilingKey(11);  //10
        //返回此映射中包含的映射的反向排序视图。
        NavigableMap<Integer, String> integerStringNavigableMap = treeMap.descendingMap();
        //返回此地图中包含的键的相反顺序NavigableSet 。
        NavigableSet<Integer> integers = treeMap.descendingKeySet();//[1, 2, 3, 4, 5, 10, 15]
        //返回与该地图中的最小键相关联的键值映射，如果地图为空，则返回 null 。
        Map.Entry<Integer, String> integerStringEntry1 = treeMap.firstEntry();
        //返回此地图中当前的第一个（最低）键。
        Integer integer1 = treeMap.firstKey();
        //返回与小于或等于给定键的最大键相关联的键值映射，如果没有此键，则 null 。
        Map.Entry<Integer, String> integerStringEntry2 = treeMap.floorEntry(6);
        //返回小于或等于给定键的最大键(排序在该键的前面)，如果没有这样的键，则返回 null 。
        Integer integer2 = treeMap.floorKey(6);
        //返回此地图部分的视图，其密钥严格小于 toKey 。
        SortedMap<Integer, String> integerStringSortedMap = treeMap.headMap(5);
        //返回此地图部分的视图，其键值小于（或等于，如果 inclusive为真） toKey 。
        NavigableMap<Integer, String> integerStringNavigableMap1 = treeMap.headMap(5, true);
        //返回此地图部分的视图，其键大于等于 fromKey 。
        SortedMap<Integer, String> integerStringSortedMap1 = treeMap.tailMap(5);//{5=e, 4=d, 3=c, 2=b, 1=a}
        //返回此地图部分的视图，其键大于（或等于，如果 inclusive为真） fromKey 。
        NavigableMap<Integer, String> integerStringNavigableMap2 = treeMap.tailMap(5, false);//{4=d, 3=c, 2=b, 1=a}
        //返回与最小密钥相关联的密钥值映射严格大于给定密钥，如果没有这样的密钥则 null 。
        Map.Entry<Integer, String> integerStringEntry3 = treeMap.higherEntry(5);
        //返回严格大于给定键的最小键，如果没有这样的键，则返回 null 。
        Integer integer3 = treeMap.higherKey(5);
        //返回与该地图中最大关键字关联的键值映射，如果地图为空，则返回 null 。
        Map.Entry<Integer, String> integerStringEntry4 = treeMap.lastEntry();
        //返回当前在此地图中的最后（最高）键。
        Integer integer4 = treeMap.lastKey();
        //返回与最大密钥相关联的密钥值映射严格小于给定密钥，如果没有这样的密钥，则 null 。
        Map.Entry<Integer, String> integerStringEntry5 = treeMap.lowerEntry(5);
        //返回严格小于给定键的最大键，如果没有这样的键，则返回 null 。
        Integer integer5 = treeMap.lowerKey(5);
        //返回此地图中包含的键的NavigableSet视图
        NavigableSet<Integer> integers1 = treeMap.navigableKeySet();//[15, 10, 5, 4, 3, 2, 1]
        //删除并返回与该地图中的最小键相关联的键值映射，如果地图为空，则返回 null 。
        Map.Entry<Integer, String> integerStringEntry6 = treeMap.pollFirstEntry();
        //删除并返回与该地图中最大密钥相关联的键值映射，如果地图为空，则返回 null 。
        Map.Entry<Integer, String> integerStringEntry7 = treeMap.pollLastEntry();
        //返回此地图部分的视图，其关键字范围从 fromKey （含）到 toKey ，独占。
        SortedMap<Integer, String> integerStringSortedMap2 = treeMap.subMap(10, 4);//{10=f, 5=e}
        //返回此地图部分的视图，其关键范围为 fromKey至 toKey 。 可以指定是否包含
        NavigableMap<Integer, String> integerStringNavigableMap3 = treeMap.subMap(10, false, 4, true);//{5=e, 4=d}
        System.out.println(integerStringNavigableMap3);

    }
}
